package fr.upmc.aladyn.test;

import fr.upmc.aladyn.transactionables.Transactionable;

/**
 * A class used for testing. Inherits from "MyPoint" and adds a "Couleur" attribute
 * @author Ritchie Nithoo
 * @author Jules Fabry
 * @version 1.0
 *
 */
@Transactionable
public class MyPointColore extends fr.upmc.aladyn.test.MyPoint{
	private Couleur couleur;
	
	/**
	 * 
	 * @param couleur The color attribute of the point
	 * @param x The X coordinate of the point
	 * @param y The Y coordinate of the point
	 */
	public MyPointColore(Couleur couleur,int x,int y){
		super(x,y);
		this.couleur = couleur;
	}
	
	/**
	 * Sets the new color of the "MyPointColore"'
	 * @param newCouleur The new color
	 */
	public void setCouleur(Couleur newCouleur){
		fr.upmc.aladyn.transactionables.BackUpManager.save(this);
		couleur=  newCouleur;
	}
	
	/**
	 * Returns the color of the point
	 * @return The color of the point
	 */
	public Couleur getCouleur(){
		return couleur;
	}
	
	/**
	 * This method applies changes to the point , and throws an exception divided by zero.
	 * We use this method for testing.
	 */
	@Transactionable
	public void changeAll(){
		try{
			fr.upmc.aladyn.transactionables.BackUpManager.begin();
			setX(3);
			setCouleur(new Couleur("red"));
			setX(getX()/0);
			fr.upmc.aladyn.transactionables.BackUpManager.end();
		}catch(Exception e){
			fr.upmc.aladyn.transactionables.BackUpManager.restore();
			fr.upmc.aladyn.transactionables.BackUpManager.end();
			throw e;
		}
	}
}
